這篇將說明另一種動畫方式Property animation的objectAnimator。
Property animation 依字面上的解釋就是透過動畫改變物件的屬性。Property animation 以XML定義的動畫,在動畫的期間修改目標對象的屬性,從而使對象展現出動畫效果。例如背景顏色或透明度。View animation 只能用在view,且改變的是View的繪制效果,View真正的屬性並沒有改變。而Property animation則是真的會改變物件的屬性。
使用Property Animation很簡單,只要2個步驟
步驟1:在res/animator 新增 anim_alpha.xml
使動畫期間1000毫秒修改物件的alpha屬性值至0.1
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="alpha"
android:valueTo="0.1f" />
步驟2:在textView使用anim_alpha動畫:在Activity 呼叫 AnimatorInflater.loadAnimator
AnimatorInflater.loadAnimator(this, R.animator.anim_alpha)
.apply {
setTarget(textView)
start()
}
duration 動畫持續的時間(毫秒)
android:startOffset 動畫開始執行前的等待時間
propertyName 動畫改變的屬性
valueFrom 動畫開始的值
valueTo 動畫結束的值
android:interpolator 加速度
android:repeatCount 重覆執行次數
android:repeatMode 動畫重覆執行的方式
propertyName="BackgroundColor",改變背景顏色。
改變背景顏色從colorAccent到colorPrimary
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="BackgroundColor"
android:valueFrom="@color/colorAccent"
android:valueTo="@color/colorPrimary" />
android:propertyName="x",改變x軸位置。
到x軸為100的地方
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="x"
android:valueTo="100"
android:valueType="floatType" />
android:propertyName="rotation", z軸旋轉
z軸旋轉180度
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="180"
android:valueType="floatType" />
android:propertyName="scaleX" ,X放大
x放大3倍
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="scaleX"
android:valueTo="3"
android:valueType="floatType" />
android:propertyName=“alpha”,改變透明度
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:propertyName="alpha"
android:valueTo="0.5f" />
在set裡放2個objectAnimator,執行多個動畫。
android:ordering="together" 同時執行
android:ordering="sequentially" 依序執行
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<objectAnimator
android:duration="2000"
android:propertyName="x"
android:valueTo="100"
android:valueType="floatType" />
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:propertyName="alpha"
android:valueFrom="1.0f"
android:valueTo="0.5f" />
</set>
animAlpha.setOnClickListener {
startAnimator(R.animator.anim_alpha)
}
Property animation 到這裡大家應該會使用了,也看得出來跟View animation的差異,property animation著重在改變物件的屬性。而view animation 只是修改View的繪制效果,並沒有真的改變物件的屬性。下一篇我們將再將介紹使用程式碼來寫property animation及更深入的應用。
參考:
https://developer.android.com/reference/android/animation/ObjectAnimator
https://developer.android.com/guide/topics/resources/animation-resource#Property
完整程式:
https://github.com/evanchen76/PropertyAnimationSample